#include <Arduino.h>                                
#include <BluetoothSerial.h>
#include <TM1637.h>                                                 //引入Arduino库,TM1637库,Bluetooth库

BluetoothSerial SerialBT;                                           //定义蓝牙串口对象

int CLK=16;
int DIO=17;
int in1=13;
int in2=12;
int ENA=25;                                                          //定义引脚

int i=0;                                                            
int v=0;      
int D=0;                                                            //定义变量

TM1637 tm1637(CLK,DIO);                                             //定义数码管对象

/*****************************************定义函数**********************************************************/





/*****************************************主函数************************************************************/

void setup() {                                                      //初始化
    Serial.begin(115200);                                           //串口初始化
    SerialBT.begin("ESP32dianjitest");                              //蓝牙初始化
    Serial.println("蓝牙可以使用");                                  //串口显示
    pinMode(in1,OUTPUT);
    pinMode(in2,OUTPUT);
    pinMode(ENA,OUTPUT);                                            //定义引脚模式
    tm1637.init();                                                  //初始化TM1637
    tm1637.point(0);                                                //设置小数点 关闭
    tm1637.set(BRIGHT_TYPICAL);                                     //设置亮度
    tm1637.display(0,D);                                            //档位显示一次
}

void loop() {
    if (SerialBT.available())                                       //读取蓝牙数据
    {
        char a=SerialBT.read();                                     
        if(a=='A'){                                                 //前进
            Serial.println("前进");
            digitalWrite(in1,HIGH);
            digitalWrite(in2,LOW);
            analogWrite(ENA,v);
            for(;i<D*30;i++){
            SerialBT.printf("{A%d:%d:%d:%d}$",i,0,100,0);
            delay(10);
            }
            }
            else if(a=='E'){                                        //后退
                Serial.println("后退");
                digitalWrite(in1,LOW);
                digitalWrite(in2,HIGH);
                analogWrite(ENA,v);
                for(;i<D*30;i++){
                SerialBT.printf("{A%d:%d:%d:%d}$",i,0,100,0);
                delay(10);
                }
            }
            else if (a == 'X') {                                    // 加档
                    if (D == 0) {                                   // 二档升三档
                        v=100;
                        D=1;
                    }
                    else if (D == 1) {                              // 一档升二档
                        v=180;                                      // 二档
                        D= 2;
                        Serial.println("切换至二档");
                    }
                
                    else if (D== 2) {                               // 二档升三档
                        v = 255;                                    // 三档
                        D = 3;
                        Serial.println("切换至三档");
                    }
                    tm1637.display(0, D);
                } 
                else if ( a == 'Y') {                               // 减档操作
                    if (D == 3) {                                   // 三档降二档
                        v=180;
                        D=2;
                        Serial.println("切换至二档");
                        tm1637.display(0, D);
                    } 
                    else if (D == 2) {                              // 二档降一档
                        v=100;                                      // 一档
                        D=1;
                        Serial.println("切换至一档");
                        tm1637.display(0, D);
                    }
                    else if (D == 1) {                              // 一档降停止
                        v=0;                                        // 停止
                        D=0;
                        Serial.println("停止");
                        tm1637.display(0, D);
                    }
                } 
                else if ( a == 'Z') {                               // 加档操作
                    Serial.println("停止");
                    digitalWrite(in1,LOW);
                    digitalWrite(in2,LOW);
                    for(;i>0;i--){
                        SerialBT.printf("{A%d:%d:%d:%d}$",i,0,100,0);
                        delay(10);
                        }
                }
    }
}
